From: Colin Walters Date: Sun, 24 Jul 2016 19:11:17 +0000 (-0400) Subject: fetcher: Explicitly join thread if it's not self X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~49^2~57 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ba21023d6cd28dca6377b8bf425fc5fa489f5fe7;p=ostree.git fetcher: Explicitly join thread if it's not self This fixes a valgrind leak; see [this StackOverflow thread](http://stackoverflow.com/questions/17642433/why-pthread-causes-a-memory-leak). Closes: #410 Approved by: giuseppe --- diff --git a/src/libostree/ostree-fetcher.c b/src/libostree/ostree-fetcher.c index 865c7b76..bde6ed9a 100644 --- a/src/libostree/ostree-fetcher.c +++ b/src/libostree/ostree-fetcher.c @@ -540,7 +540,14 @@ _ostree_fetcher_finalize (GObject *object) /* Terminate the session thread. */ g_main_loop_quit (self->thread_closure->main_loop); - g_clear_pointer (&self->session_thread, g_thread_unref); + if (self->session_thread) + { + /* We need to explicitly synchronize to clean up TLS */ + if (self->session_thread != g_thread_self ()) + g_thread_join (self->session_thread); + else + g_clear_pointer (&self->session_thread, g_thread_unref); + } g_clear_pointer (&self->thread_closure, thread_closure_unref); G_OBJECT_CLASS (_ostree_fetcher_parent_class)->finalize (object);